// timeUtils.js
import dayjs from 'dayjs'

/**
 * 将任意日期格式化为指定格式
 * @param {Date | string | null | undefined} date - 日期对象或日期字符串
 * @param {string} formatStr - 输出格式，例如 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的字符串，失败时返回空字符串
 */
export function formatDate(date, formatStr = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return ''
  const d = dayjs(date)
  return d.isValid() ? d.format(formatStr) : ''
}

/**
 * 将字符串解析为 Date 对象
 * @param {string} dateStr - 日期字符串
 * @returns {Date | null}
 */
export function parseDate(dateStr) {
  const d = dayjs(dateStr)
  return d.isValid() ? d.toDate() : null
}

/**
 * 获取最近 N 天的起止时间（含今天）
 * @param {number} n - 天数，默认 7
 * @returns {[string, string]} - 返回格式化后的时间字符串数组
 */
export function getRecentNDaysRange(n = 7) {
  const end = dayjs().endOf('day')
  const start = dayjs().subtract(n - 1, 'day').startOf('day')
  return [start.format('YYYY-MM-DD HH:mm:ss'), end.format('YYYY-MM-DD HH:mm:ss')]
}

/**
 * 获取本月起止时间
 * @returns {[string, string]}
 */
export function getCurrentMonthRange() {
  const start = dayjs().startOf('month')
  const end = dayjs().endOf('month')
  return [start.format('YYYY-MM-DD HH:mm:ss'), end.format('YYYY-MM-DD HH:mm:ss')]
}

/**
 * 获取当前时间（格式化字符串）
 * @param {string} formatStr
 * @returns {string}
 */
export function now(formatStr = 'YYYY-MM-DD HH:mm:ss') {
  return dayjs().format(formatStr)
}
